package com.cunfang.service;

import java.util.List;

import org.springframework.stereotype.Service;

import com.cunfang.base.service.BaseService;
import com.cunfang.entity.Page;
import com.cunfang.entity.PageData;
import com.cunfang.entity.UserInfo;
import com.cunfang.util.CONNECTOR;
import com.cunfang.util.ConfigUtil;
import com.cunfang.util.MD5;

@Service("com.cunfang.finance.sys.user")
public class UserService extends BaseService {

	/**
	 * 
	 * @功能: 用户登录
	 * @作者: rxj
	 * @日期: 2017年7月6日
	 */
	@SuppressWarnings("unchecked")
	public String login(PageData pd) throws Exception {
		if (!pd.containsKey("username"))
			return this.outError("1");
		if (!pd.containsKey("password"))
			return this.outError("1");

		pd.put("password", MD5.md5(pd.get("password").toString()));
		List<PageData> list = (List<PageData>) this.getDao().findForList(
				"UserMapper.login", pd);
		if (list.size() == 0) {
			return this.outError("2"); /* 账号或密码错误 */
		}
		if (list.size() > 1) {
			return this.outError("3"); /* 账号超出限制，请联系管理员 */
		}
		/* 登录成功...得到登录的信息 */
		PageData userPd = list.get(0);
		if ("1".equals(userPd.getStrings("deleted"))) {
			return this.outError("4"); /* 账号已被移除 */
		}
		
		/* 生成token */
		int tokenTime=Integer.valueOf(ConfigUtil.getProperties("tokenSessionTime"));
		String token = CONNECTOR.GETCURTOKEN(tokenTime,
				userPd.getString("id"));
		userPd.put("token", token);
		userPd.put("time", tokenTime);

		UserInfo userInfo = new UserInfo();
		userInfo.setUserid(userPd.get("id").toString());
		userInfo.setToken(token);
		userInfo.setUsername(list.get(0).getString("username"));
		userInfo.setName(list.get(0).getString("name"));
		this.setUserInfo(userInfo);

		return this.outPageData(userPd);
	}
	
	/**
	 * 
	 * @功能: 用户登出
	 * @作者: rxj
	 * @日期: 2017年7月7日
	 */
	@SuppressWarnings("unchecked")
	public String logOut() {

		CONNECTOR.RemoveToken(this.GetToken());

		return this.outString("登出成功");
	}
	
	/**
	 * 
	 * @throws Exception 
	 * @功能: 用户菜单
	 * @作者: rxj
	 * @日期: 2017年7月10日
	 */
	@SuppressWarnings("unchecked")
	public String getUserMenu() throws Exception {
		UserInfo userInfo =this.getUserInfo();	
		PageData pd = new PageData();
		if(userInfo == null){
			return this.outError("没有用户登录");
		}
		pd.put("username", userInfo.getUsername());
		List<PageData> list = (List<PageData>) this.getDao().findForList(
				"UserMapper.getUserMenu", pd);
		//修改用户登录时间
		int result = (Integer) this.getDao().update("UserMapper.updateLoginTime", pd);
		/*
		 *设置权限信息缓存 
		 */
		if(list != null){
			for(PageData permission: list){
				UserInfo.permission.add(permission.getString("menu_permission"));
			}
			this.setPermission(UserInfo.permission);
		}
		return this.outListPageData(list);
	}

	/**
	 * 
	 * @throws Exception 
	 * @功能: 用户管理列表
	 * @作者: rxj
	 * @日期: 2017年7月10日
	 */
	@SuppressWarnings("unchecked")
	public String get(PageData pd) throws Exception {
		String userId = "";
		if (pd.containsKey("user_id")) {
			userId = pd.get("user_id").toString();
		} else {
			if (this.getUserInfo() != null) {
				userId = this.getUserInfo().getUserid();
			} else {
				return this.outError("请登录或设置参数");
			}
		}
		pd.put("user_id", userId);
		PageData userPd = (PageData) this.getDao().findForObject(
				"UserMapper.get", pd);
		return this.outPageData(userPd);
	}
	/**
	 * 
	 * @throws Exception 
	 * @功能: 用户管理列表
	 * @作者: rxj
	 * @日期: 2017年7月10日
	 */
	@SuppressWarnings("unchecked")
	public String findUserList(PageData pd) throws Exception {
		Page page = new Page();
		page.setCurrentPage(Integer.parseInt(pd.getStrings("currpage")));
		page.setShowCount(Integer.parseInt(pd.getStrings("count")));
		page.setPd(pd);
		List<PageData> list= (List<PageData>) this.getDao()
				.findForList("UserMapper.findUserList", page);
		return this.outPage(page, list);
	}
	
	/**新增用户
	 * @param pd
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public String add(PageData pd) throws Exception {
		if (!pd.containsKey("username")) {
			return this.outError("缺少参数username");
		}
		if (!pd.containsKey("name")) {
			return this.outError("缺少参数name");
		}
		if (!pd.containsKey("password")) {
			return this.outError("缺少参数password");
		}
		if (!pd.containsKey("role_id")) {
			return this.outError("缺少参数role_id");
		}
		pd.put("id", this.getUUID());
		pd.put("status", "0");
		pd.put("del_flag", "0");
		pd.put("password", MD5.md5(pd.getString("password")));
		Integer i = (Integer) this.getDao().save("UserMapper.addUserInfo", pd);
		if (i > 0) {
			return this.outString("success");
		}
		return this.outError("error");		
	}
	/**修改用户
	 * @param pd
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public String update(PageData pd) throws Exception {
		if (!pd.containsKey("username")) {
			return this.outError("缺少参数username");
		}
		if (!pd.containsKey("name")) {
			return this.outError("缺少参数name");
		}
		if (!pd.containsKey("password")) {
			return this.outError("缺少参数password");
		}
		if (!pd.containsKey("role_id")) {
			return this.outError("缺少参数role_id");
		}
		pd.put("del_flag", "0");
		String password = pd.getString("password");
		String password_tem = pd.getString("password_tem");
		if (password_tem.equals(password)) {
			pd.put("password", password_tem);
		} else {
			pd.put("password", MD5.md5(password));
		}
		Integer i = (Integer) this.getDao().update("UserMapper.updateUserInfo", pd);
		if (i > 0) {
			return this.outString("success");
		}
		return this.outError("error");		
	}
	/**禁用或者启用用户
	 * @param pd
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public String disableUser(PageData pd) throws Exception {	
		if (!pd.containsKey("id")) {
			return this.outError("缺少参数id");
		}
		Integer i = (Integer) this.getDao().update("UserMapper.disableUser", pd);
		if (i > 0) {
			return this.outString("success");
		}
		return this.outError("error");		
	}
	/**禁用或者启用用户
	 * @param pd
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public String deleteUser(PageData pd) throws Exception {	
		if (!pd.containsKey("id")) {
			return this.outError("缺少参数id");
		}
		Integer i = (Integer) this.getDao().delete("UserMapper.deleteUser", pd);
		if (i > 0) {
			return this.outString("success");
		}
		return this.outError("error");		
	}
	
	
}
